<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>new</title>
</head>
<body>
	<button id="test">click me!</button>
	<script>
		var puppet={
			rules:false
		};
		function emp(){
			this.rules=true;
			return puppet;
		}
		var empp=new emp();
		console.log(empp===puppet);
		// 构造函数返回的对象 不是new 表达式返回的对象 不是太理解细节
		console.log(empp.rules) //蒙蔽。
		//函数和方法通常以描述其行为的动词小写开头 
		//构造函数构造函数首字母大写开头
		//
		// 不同类型调用函数的主要区别在于 最终作为函数执行的上下文不一样
		// this所指的对象
		function btn(){
			this.clicked=false;
			this.click=()=>{
				this.clicked=true;
				console.log(this.clicked);
				console.log(bb.clicked);
				console.log(el.clicked);//这回undefined

			}
		}
		var bb=new btn();
		var el=document.getElementById('test');
		el.addEventListener('click',bb.click);
		// 通过apply call显示的设置函数的上下文
		// Function ==> function
		// 函数可以拥有属性 和 方法。。。
		// 函数上的函数 或者对象上的函数
		// 
	</script>
</body>
</html>

































